package com.pkche.core.advanced.form;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

/**
 * 验证器抽象类，定义通用的表单验证实现方法<br/>
 * Describe：此类用于将表单验证的结果反馈到浏览器，并将错误的反馈消息封装成map的键值对 <br />
 * User："Qiang" <br/>
 * Time：2015年2月17日 下午10:59:14 <br/>
 */
public abstract class Validator {
	// 验证信息map
	protected Map<String, String> validateMap = new HashMap<String, String>();

	/**
	 * 添加一组错误信息，在表单提交时反馈到浏览器
	 * 
	 * @param boxName
	 *            表单域名称，消息将显示在此表单域的后面
	 * @param msg
	 *            消息内容
	 * @return 当前的验证对象
	 */
	public Validator err(String boxName, String msg) {
		validateMap.put(boxName, msg);
		return this;
	}

	/**
	 * 添加一个正则验证，用于在表单提交时反馈到浏览器
	 * 
	 * @param boxName
	 *            表单域名称
	 * @param value
	 *            值
	 * @param regex
	 *            正则
	 * @param msg
	 *            如果验证不通过，需要反馈的消息
	 * @return
	 */
	public Validator regex(String boxName, String value, String regex,
			String msg) {
		if (!regex(regex, value)) {
			// 验证不通过，添加反馈消息
			err(boxName, msg);
		}
		return this;
	}

	/**
	 * 执行正则验证
	 * 
	 * @param regex
	 *            表达式
	 * @param input
	 *            输入对象
	 * @return 符合正则返回true，否则返回false
	 */
	public final static boolean regex(String regex, String input) {
		if (input == null)
			return false;
		return Pattern.matches(regex, input);
	}

	/**
	 * @return 通过返回true，否则返回false
	 */
	public boolean passed() {
		return this.validateMap.size() == 0;
	}

}
